package com.mi.rule.util;

import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * 金额工具
 * 四舍五入,保留2位小数
 */
public class AmountKit {
    private AmountKit() {
    }

    /**
     * 加法
     */
    public static BigDecimal add(Object v1, Object v2, int scale) {
        return add(new BigDecimal(v1.toString()), new BigDecimal(v2.toString()), scale);
    }

    public static BigDecimal add(BigDecimal b1, BigDecimal b2, int scale) {
        BigDecimal multiply = b1.add(b2);
        return multiply.setScale(2, RoundingMode.DOWN);
    }

    /**
     * 减法
     */
    public static BigDecimal sub(Object v1, Object v2, int scale) {
        return sub(new BigDecimal(v1.toString()), new BigDecimal(v2.toString()), scale);
    }


    public static BigDecimal sub(BigDecimal b1, BigDecimal b2, int scale) {
        BigDecimal multiply = b1.subtract(b2);
        return multiply.setScale(2, RoundingMode.DOWN);
    }

    /**
     * 乘法
     */
    public static BigDecimal mul(Object v1, Object v2, int scale) {
        return mul(new BigDecimal(v1.toString()), new BigDecimal(v2.toString()), scale);
    }

    public static BigDecimal mul(BigDecimal b1, BigDecimal b2, int scale) {
        BigDecimal multiply = b1.multiply(b2);
        return multiply.setScale(2, RoundingMode.DOWN);
    }


    /**
     * 除法
     */
    public static BigDecimal div(Object v1, Object v2, int scale) {
        return div(new BigDecimal(v1.toString()), new BigDecimal(v2.toString()), scale);
    }

    public static BigDecimal div(BigDecimal b1, BigDecimal b2, int scale) {
        return b1.divide(b2, scale, RoundingMode.DOWN);
    }

    /**
     * 金钱转文字大写
     * 支持整数16位小数两位
     */
    public static String moneyToUp(String money) {
        return new AmountConversion(money).result();
    }
//    public static void main(String[] args) {
//        System.out.println(moneyToUp("1234567890.01"));
//        System.out.println(moneyToUp("1234567890.10"));
//        System.out.println(moneyToUp("9999999999.99"));
//
//    }
}
